<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>url解析</title>
</head>

<body>
  <script>
    /**获取 url 中的参数
      1. 指定参数名称，返回该参数的值 或者 空字符串
      2. 不指定参数名称，返回全部的参数对象 或者 {}
      3. 如果存在多个同名参数，则返回数组
      例：http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe 
      key [1, 2, 3]
    **/

    var url = "http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe";
    function getUrlParam(sUrl, sKey) {
      var paramArr = sUrl.split('?')[1].split('#')[0].split('&');
      var res = {};
      for (let index = 0; index < paramArr.length; index++) {
        const elementArray = paramArr[index].split('=');
        if (res[elementArray[0]] === void 0) {
          res[elementArray[0]] = elementArray[1];
        } else {
          res[elementArray[0]] = [].concat(res[elementArray[0]], elementArray[1]);
        }
        console.log(res);
      }

      return res[sKey];
    }

    function getUrlParam1(sUrl, sKey) {
      var paramArr = sUrl.split('?')[1].split('#')[0].split('&'); // 取出每个参数的键值对放入数组
      const obj = {};
      paramArr.forEach(element => {
        const [key, value] = element.split('=');  // 取出数组中每一项的键与值
        if (obj[key] === void 0) {   // 表示第一次遍历这个元素，直接添加到对象上面
          obj[key] = value
        } else {
          obj[key] = [].concat(obj[key], value); // 表示不是第一次遍历说明这个键已有，通过数组存起来。
        }
        console.log(obj)
      });
      return sKey === void 0 ? obj : obj[sKey] || ''   // 如果该方法为一个参数，则返回对象。
      //如果为两个参数，sKey存在，则返回值或数组，否则返回空字符。
    }
    console.log(getUrlParam(url, 'key'));



    //map.js
    global.gc(); // 0 每次查询内存都先执行gc()再memoryUsage()，是为了确保垃圾回收，保证获取的内存使用状态准确

    function usedSize() {
      const used = process.memoryUsage().heapUsed;
      return Math.round((used / 1024 / 1024) * 100) / 100 + "M";
    }

    console.log(usedSize()); // 1 初始状态，执行gc()和memoryUsage()以后，heapUsed 值为 1.64M

    var map = new Map();
    var b = new Array(5 * 1024 * 1024);

    map.set(b, 1);

    global.gc();
    console.log(usedSize()); // 2 在 Map 中加入元素b，为一个 5*1024*1024 的数组后，heapUsed为41.82M左右

    b = null;
    global.gc();

    console.log(usedSize()); // 3 将b置为空以后，heapUsed 仍为41.82M，说明Map中的那个长度为5*1024*1024的数组依然存在

  </script>
</body>

</html>